約 6,055,408 件
https://w.atwiki.jp/android/pages/34.html
なんでもかんでもAndroid情報検索してみたYahoo pipes rss なかなか更新されないので RSSへのリンク も貼っておきます。 大分ごみを減らしました。減らしすぎたかも・・・? キャッシュを消す方法はないんかなあ。。。 showrss プラグインエラー RSSが見つからないか、接続エラーです。
https://w.atwiki.jp/linuxjapanwiki/pages/74.html
Android ▲Androidロゴ Androidは、主にスマートフォンやタブレットなどの、タッチスクリーンモバイル機器向けに設計されている、Linuxカーネルやその他のオープンソースソフトウェアの改変版をベースとしたモバイルオペレーティングシステムである。 オープン・ハンドセット・アライアンスというコンソーシアムによって開発されており、主な貢献と商業的な販売はGoogleが担っている。 ▲ホーム画面 各種データ 開発者 Google LLC / オープン・ハンドセット・アライアンス /Android オープンソースプロジェクト (AOSP) 系統 Android 開発状況 開発中 初版 2008年9月23日 最新版 11 / 2020年9月8日 リポジトリ https //android.googlesource.com/ カーネル Linux ライセンス Apache License 2.0 , GNU GPL v2(カーネル)など ウェブサイト https //android.com/ 概要 Androidのコアとなるソースコードは、Androidオープンソースプロジェクト(AOSP)として知られており、主にApache Licenseの下でライセンスされている。 これによってサードパーティーによるカスタマイズが可能となり、ゲーム機、デジタルカメラ、PCなどの他の様々な電子機器向けに開発され、それぞれに特化したユーザーインターフェースを持つようになっている。 よく知られている派生製品には、テレビ用のAndroid TVやウェアラブル用のWear OSなどがあるが、これらはGoogleが開発したものである。 ソフトウェアの配布は、一般的にGoogle PlayストアやSamsung Galaxyストアのようなプロプライエタリなアプリケーションストア、またはAPK形式でソフトウェアパッケージを使用してAptoideやF-Droidのようなオープンソースのプラットフォームを介して提供されている。 Androidは、スマートフォンでは世界で最も売れているOSだが、国内ではiOSに続き2番目のシェア率となっている。 Androidには文字入力のためのIMEが搭載されていて、テキストを入力するところをタップすれば仮想キーボードが表示されるようになっている。 ただ、日本語入力用の仮想キーボードはデフォルトでは搭載されていない。日本語入力を有効にするにはサードパーティー製のIMEのインストールが必要になってくる。 Androidでは、Google Playという独自のアプリケーションインストーラが搭載されており、ユーザーはそこでアプリをインストールすることができる。 また、APKファイルから直接インストールすることもできる。ただ、Googleの認めていないアプリや悪質なアプリもあるため、注意が必要である。 リリース 主なリリースを以下に列挙する。(*1) 主なバージョン リリース日 API 2.3.3 – 2.3.7 2010年12月17日 10 4.0.3 – 4.0.4 2011年10月18日 15 4.1.x 2012年7月9日 16 4.2.x 2012年11月13日 17 4.3 2013年7月24日 18 4.4 2013年10月31日 19 5.0 2014年11月3日 21 5.1 2015年3月9日 22 6.0 2015年10月5日 23 7.0 2016年8月23日 24 7.1 2016年12月5日 25 8.0 2017年8月21日 26 8.1 2017年12月5日 27 9.0 2018年8月6日 28 10.0 2019年9月3日 29 派生OS ColorOS CyanogenMod AOKP Fire OS MIUI EMUI LeWa OS OmniROM Paranoid Android Replicant Indus OS LineageOS 外部リンク 公式ウェブサイト コメント欄 コメント欄の利用に関してはコメント欄の利用を参照して下さい。 本ページに無関係な内容のコメントは一律して削除されます。Wiki運営に関しては Wiki運営掲示板 にお願いします 。 投稿されているコメントへの返信の際は、必ず返信したいコメント横の○にチェックを入れて返信して下さい。 +上記の内容を守れる方のみご利用ください。 上記の内容を守れる方のみご利用ください。 コメントログ作成 - 名無しさん (2020-05-02 17 36 24) HarmonyOSもAndroidフォークと言われていますよね - 名無しさん (2021-06-14 21 30 53) ですね - Anonymous (2021-06-15 09 07 36) 名前 コメントログ
https://w.atwiki.jp/android/pages/136.html
ネット上に公開されているAndroidアプリケーションの索引 ※基本的にソース、あるいはapkファイルが公開されているもの。 ツール タスクマネージャ SDK version Task manager primitive prototype m3-rc37a以前 メディアプレイヤー Video/Music player sample (from local disk as well as remote URL’s) m3-rc37a以前 メール Send email via GMail (actually via SMTP) m3-rc37a以前 GoogleTalk Totally *Unofficial* Android GTalk Client (Send/Receive XMPP Messages) m3-rc37a以前 Android用Google Talkクライアントをm5-rc14に移植 m5-rc14 Mame Talk Ver.0.8 m5-rc14 Twitter Twitter Client for Android (How to make XML over HTTP calls) m3-rc37a以前 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (TwitterClient3.png) AndroidでTwitterクライアント ver.3 m3-rc37a以前 地図関連 Androidで地図アプリケーションを作ってみた m3-rc37a以前 Androidの地図アプリをぐるなびに対応しました m3-rc37a以前 Androidの地図アプリをm5-rc14っぽくしてみた m5-rc14 ビューア ComicViewer3 -Androidで電子ブックリーダ m3-rc37a以前 Android用電子ブックリーダをm5-rc14に移植 m5-rc14 ゲーム テーブルゲーム AndroidとFlickrで神経衰弱 m3-rc37a以前 ブロック崩しをm5-rc14に移植 m5-rc14 その他 アンドロイド・アプリケーション こめんと なるべく集めて回るけど作ったひとが自発的に追加してくれるとありがたいなあ - kojira 2008-02-12 21 54 53 プラグイン追加とかが自分で出来ないから不便だなあ。そのうち移転するかも。 - kojira 2008-02-18 23 09 07 名前
https://w.atwiki.jp/devemin/pages/13.html
●Activityの回転時の再生成への対応 ①再起動させなければいいので、onConfigurationChanged() メソッドをオーバーライド ②Activityのマニフェストに android configChanges="orientation|keyboardHidden" @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } http //d.hatena.ne.jp/hyoromo/20090712/1247385249 (Softbank 005SHでは、keyboardHiddenが必要だった。) ●Eclipseの入力補完(オートコンプリート)が遅い件 バージョン3.62にすれば問題ないらしい ●アップデート後など、eclipseが起動しなくなった場合 eclipse\configuration\jp.sourceforge.mergedoc.pleiades フォルダを削除したらOKだった ●Android アプリ開発時、有料・無料の2種プロジェクトを作るTips (ソースを2プロジェクトで共有する方法) こちらを参考にさせてもらいました。 (Androidの無料アプリ・有料アプリを切り替えてビルドする方法) http //d.hatena.ne.jp/eaglesakura/20100629/1277832265 上記URLで書いてあった方法は、部分的に、自分のアプリでは対応できない部分があったので、自分のやった方法で、全体名流れを補足。 まず2つプロジェクトを普通に作る。(基本app-freeと派生app-paid) 2つのパッケージ名はそれぞれ、 com.appli.free com.appli.paid など、最後の1段落のみ変えたりするとわかりやすいかも。 プロジェクト名は、ここでは「app-free」「app-paid」としてみる。 派生プロジェクトpaidでは、src、assets、resディレクトリを、 リンクしたディレクトリとする。 派生プロジェクトapp-paidでは、基本プロジェクトapp-free内の自動生成ファイルR.javaが必要になる。 手動で毎回やるのは酷なので、派生プロジェクトapp-paidビルド時に毎回app-free側のR.javaが自動でコピーされるよう、バッチファイルを作成、プロジェクトのプロパティ、ビルダー、で、ビルド時に毎回実行されるようにする。初回はプロジェクトのクリーンを実行で、×マーク消える。 ${build_project}\rcopy.bat ${build_project} 上記サイトを参考にさせていただきました。 rcopy.bat -------------------------------- @echo off SET PARENT_PROJECT=app-free SET CURRENT_PROJECT=app-paid REM 定義ファイルをコピーする cd ..\%PARENT_PROJECT%\ REM genフォルダをコピーする xcopy /s /e /y .\gen ..\%CURRENT_PROJECT%\gen cd ..\CURRENT_PROJECT\ -------------------------------- リソースを共有するので、有料版、無料版をそれぞれリソースに含めるので、容量はダブって損となる。気にする人は気にするかも?でも自分は利便性を取りました。 @string/app_name @string/app_name_paid @drawable/icon @drawable/icon_paid AndroidManufest.xmlは、アプリそれぞれに設定する。 (パッケージ名、label ) アクティビティ名を、省略名ではなく、 activity android name="light.diary.plus.EditWindow" などにする必要があるかも これらの結果、 app-freeプロジェクト、はほかの通常のプロジェクトとなんら変わりない app-paidプロジェクトは、res, asset, srcがリンクフォルダであり、src内パッケージは「com.appli.free」がある状態。 ×印が消えない場合は、プロジェクトのクリーン&eclipseの再起動、F5キーによるリフレッシュなどをトライ。 (必要に応じて、import light.diary.plus.R; ?) 有料・無料の処理切り分けは、getPackageName()で行う。 ●プログレスダイアログProgress Dialog 既に動いているサンプルをそのまま使うのが吉。 スレッド以外でGUI操作するとメモリエラーとなる。 https //groups.google.com/forum/#!msg/android-group-japan/0YlnSLptx8w/g6kAZuxrR14J 引用 ProgressDialog progressDialog; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); progressDialog = new ProgressDialog(this); /*progressDialog.setTitle("処理中"); progressDialog.setMessage("処理を実行中です"); progressDialog.setIndeterminate(false); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.show();*/ Thread thread = new Thread(this); thread.start(); } public void run() { // 時間のかかる処理をここに記述。 try { progressDialog.setTitle("処理中"); progressDialog.setMessage("処理を実行中です"); progressDialog.setIndeterminate(false); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); handler.post(new Runnable() { @Override public void run() { progressDialog.show(); } }); Thread.sleep(5000); } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } handler.sendEmptyMessage(0); } private Handler handler = new Handler() { public void handleMessage(Messa ●ADTアップデート等エラーのときのEclipse クリーン http //www.hlplus.jp/php/blog/index.php?UID=1298450960 名前 コメント
https://w.atwiki.jp/shanghai_android/pages/15.html
無償トレーニング 日本語Android入門1:Android概念及びメリット ※日本語字幕 Android入門2:携帯以外組み込み機器でのAndroid採用状況 ※日本語字幕 Android入門3:Androidの開発環境及びコース体系 ※日本語字幕 Android入門1:中国の携帯電話市場動向 Android入門2:Android市場動向 Android入門3:Androidの開発環境 中国語Android入门课程1:Android概念及优点 Android入门课程2:Android在手机以外的嵌入式设备的应用 Android入门课程3:Android开发环境及课程体系介绍 Android入門1:中国の携帯電話市場動向 ※中国語字幕付き Android入門2:Android市場動向 ※中国語字幕付き Android入門3:Androidの開発環境 ※中国語字幕付き 製品関連 公式PV中国電信990元Android端末のTV CM モトローラ×中国聯通 Android端末「ME511(Flipout)」 モトローラ×中国電信 Android端末「XT800」 モトローラ×中国移動 OPhone端末「MT710」 モトローラ×中国移動 OPhone端末「MT710」※TV CMです。 モトローラ ME600(Backlip) レノボモバイル 「Le(楽)Phone」 イベント&製品デモレノボモバイル 「Le(楽)Phone」デモ@CES モトローラ×中国電信 Android端末「ME600(Backflip)」 OPhone OS OPhone OS 2.0 中国在住の方 = OPhone OS 2.0 on Samsung I7680 デモ1 OPhone OS 2.0 on Samsung I7680 デモ2 日本の方 = OPhone OS 2.0 on Samsung I7680 デモ1 OPhone OS 2.0 on Samsung I7680 デモ2 Android 2.2(Froyo) 中国在住の方 = Android 2.2 Official Video Android 2.2 Froyo on HTC Hero 日本の方 = Android 2.2 Official Video Android 2.2 Froyo on HTC Hero トップページ
https://w.atwiki.jp/odroid/pages/16.html
SDKのインストール SDK は http //developer.android.com/sdk/ からダウンロード出来ます。 解凍したフォルダを、SDKを配置したい場所に移動してから、SDK Setup.exe を実行すると、SDKのインストールが開始出来ます。 実機デバッグ環境の構築 ODROID 用 ADB ドライバ http //dev.odroid.com/projects/odroid-t#s-5 これをインストールして PC と接続したら、 コマンドプロンプトで SDK フォルダの tools に移動して adb devices と入力してみてください。 端末情報(BABABEEFBABABEEFなど)が表示されていたら、接続成功です。 表示されていなければ、ODROID 側の設定状態がデバッグ接続になっていない可能性があります。 設定→開発 から、USB デバッグの項目をいじってみてください。 ODROID-S の場合、USB デバッグのチェックがオフの状態で何故か繋がったりすることがありました。 ADBを使ったアプリインストール PC上の apk ファイルを adb install コマンドを使って直接 Android 端末にインストールすることが出来ます。 PATHの設定 SDKのtoolsフォルダを環境変数PATHに登録しておくと便利です。
https://w.atwiki.jp/api_programming/pages/195.html
下位ページ インテントとインテントフィルタ サービス(Service) ストレージオプション フラグメント(Fragment) プロセスとスレッド(processes and threads) リストビュー(List View) レイアウト(Layout) 入力コントロール(Controls) 設定(Setting) 通知(Notification) Content スピナーコントロールの設定レイアウトの準備 選択肢の設定string.xmlでの設定 プログラム側から値を選択する アクティビティアプリの閉じられ方で、挙動が異なる アクションバーの代わりに、ツールバーを使うアクションバーを消す ツールバーをレイアウトに追加する Activity内で、アクションバーの代わりに使う記述をする スライドメニューを実装するドロワーレイアウトを作成する ドロワービューの中身を準備するListViewで作る 別のXMLファイルで作る ドロワーのオープン・クローズを実装する バックグラウンド処理(サービス) 閉じられても動作するサービスを動かすServiceクラスの作成 Activityから、作成したサービスを動かす 加速度センサの情報を受ける 回転角の情報を受け取る回転角の解釈 画面の回転を抑制するAndroidManifest.xmlで抑制する 動的に(プラグラム内で)で抑制する インテントにオブジェクトの情報を乗っけるparcelable をインプリメントしたクラスをつくるParcelable.Creater フィールドの実装 BundleやIntentに情報を乗せる Activity側で受ける 複数の情報をリストにして表示する バイブレーションを一定時間、作動させるパーミッションの追加 Vibratorオブジェクトを生成する vibrateを実行する 通知バーにバックグラウンド起動中の表示を出す 裏返したときの方向で、記録を分ける メニューのバーを設定するメニューリソースを準備するフォルダの作成 リソースファイルの作成 設定したメニューファイルを、Activityのメニューバーに評させる メニューの選択を受け取る処理を作る チェックボックスを動作させる 設定画面を設定する/設定情報をローカルストレージに残す 記録内容をGoogleスプレッドシートに記録する 記録内容をGoogleカレンダーに記録するブラウザでURLを開く ブラウザを開くURIとして、認証ページを指定する リダイレクトを受け取る 受け取ったリダイレクトをデータに紐解く codeを送って、tokenを受け取る tokenを保存する 終了時間と開始時間から、時間の計算をする リストビューで独自レイアウトを設定する USBデバッグ リリースビルド スピナーコントロールの設定 [部分編集] レイアウトの準備 Spinner android id="@+id/planets_spinner" android layout_width="fill_parent" android layout_height="wrap_content" / 選択肢の設定 string.xmlでの設定 まずは、string.xmlに文字配列を作る string-array name="planets_array" item Mercury /item item Venus /item item Earth /item /string-array この文字配列をアダプタにして、スピナーコントロールにアダプタをするリソースのアダプタ化には、ArrayApapter.createFromResource を使用できる。simple_spinner_item はデフォルト外観を設定している。通常はこれで良し。 setDropDownViewResource(int) は選択時に一覧を表示するのに使う。なくても一応ドロップダウンは出てくるが、ちょっとしょぼい? Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter CharSequence adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); createFromResource - ArrayAdapter | Android Developers setDropDownViewResource - ArrayAdapter | Android Developers プログラム側から値を選択する Spinner.setSelection で位置を指定する。その位置を取得するにはAdapterを使う。 使っているアダプタを取得するobjSpinner.getAdapter でアダプタを取得できる objAdapter.getPosition("...") でセレクタの位置を取得値が見つからなかったら -1 が返る objSpinner.setSelection に先程取得した位置を設定する ArrayAdapter spinnerAdapter = (ArrayAdapter) objSpinner.getAdapter(); int i = spinnerAdapter.getPosition("value"); objSpinner.setSelection(i); getAdapter - AbsSpinner | Android Developers getPosition - ArrayAdapter | Android Developers setSelection - AbsSpinner | Android Developers アクティビティ アプリの閉じられ方で、挙動が異なる onDestroyが呼ばれない限りは、Serviceを使わずとも、 ↓にある通り、ホームボタンとバックボタンでアプリケーションから離れた場合で挙動が違う。 https //kokufu.blogspot.jp/2011/03/activity.html 説明として、 ホームボタン:ホームアプリケーションが起動している バックボタン:Activityスタックからポップしている と書いてあったが、気持ち悪いのは、□ボタンを押すとあたかもまだ生きているかのように、アプリケーションリストに表示されるから。画面上に残っているが実際には onDestroy で消えている。 このあたりが、「アプリケーションをスワイプして消しても消さなくてもメモリにはそれほど影響しない」ということなんだろうか。 アクションバーの代わりに、ツールバーを使う [部分編集] 今後の拡張性から、アクションバーよりツールバーを使ったほうが良い、という記述をちょこちょこ見かけるが、Android Studioでプロジェクトを作ると、基本はアクションバーが設定されている。これをツールバーに置き換える。 アプリバーの追加 | Android Developers Toolbar | Android Developers AndroidのToolBar(新しいActionBar)メモ | Qiita アクションバーを消す res/values/styles.xmlで AppThemeのテーマを変更する style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar" ツールバーをレイアウトに追加する android.support.v7.widget.Toolbar android id="@+id/toolbar" android layout_width="match_parent" android layout_height="wrap_content" / レイアウトの@android */* ,?attr/* ,?* ,?android attr/* の違い | Qiita Activity内で、アクションバーの代わりに使う記述をする /* ToolBarの設定 */ Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); toolbar.setTitleTextColor(Color.WHITE); // 設定をしておく setSupportActionBar(toolbar); // アクションバーの代わり、という設定 これを書かないと、画面上では何も表示されない(空間だけはある) スライドメニューを実装する [部分編集] NavigationDrawer が正式名称? DrawerLayout | Android Developers ナビゲーションドロワーの作成 | Android Developers ドロワーレイアウトを作成する レイアウトxmlにて、DrawerLayout オブジェクトをレイアウトのルートビューとして指定する。 ルートの中にドロワービューとメインビューを設定する順序はメインビューを先にする高さはルートに合わせる(match_parent) 次にドロワーのビューを指定するlayout_gravityを指定する(layout_gravity:どっちにくっつけるか、どちら方向から出てくるか?)右から左に出す場合にはstart layout_heightは親ビューと同じ高さを指定する layout_widthはすべての情報が見える幅を指定する ドロワービューの中身を準備する ListViewで作る ListViewの中に android layout_gravity="..." を入れないと、スライドで入ってくる設定にならず、重ねて見えている状態になる android background="#111" 背景がないと、中途半端にすけた状態で表示される。 別のXMLファイルで作る NavigationViewで作った場合、ヘッダ部分とメニュー部分をそれぞれレイアウトとメニューで作成する app headerLayout="@layout/drawer_header" app menu="@menu/drawer" ドロワーのオープン・クローズを実装する DrawerLayout にリスナーをセットする。このリスナーは DrawerLayout.DrawerListener を実装して、使う。 Activity にアクションバーがセットされている場合は ActionBarDrawerToggle が DrawerLayout.DrawerListener を実装する。 DrawerLayout mDrawerLayout = ...; ActionBarDrawerToggle mDrawerToggle; mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View view) {...} public void onDrawerOpened(View drawerView) {...} }; // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle); 【Android】スライドして表示されるメニュー | Qiita Navigation Drawer の概要 | Android 開発入門 Navigation Drawer の基本的な実装方法 | Android 開発入門 バックグラウンド処理(サービス) サービス - Android Developers Androidアプリでのバックグラウンド処理と通知機能 | Android Studio 2で始めるアプリ開発入門 - CodeZine 流れ Serviceのサブクラスを作成する AndroidManifest.xmlにサービスを登録 サブクラスで、必要なクラスをオーバーライドする。次のあたり。onCreate() onStartCommand() onDestroy() アクティビティからサービスを起動する (きちっと止まるように設計しておく) 閉じられても動作するサービスを動かす バックグラウンドで動作させるためにはServiceを用いる。 Serviceクラスの作成 Activityのように、作成・開始などのイベントで動くが、おもに3つ。 onCreate onStartCommand onDestroy Service | Android Developers Activityから、作成したサービスを動かす startServiceで起動、stopService(stopSelf)で停止。忘れずにServiceを止めないと、いつまでも動き続ける。 startService、stopServiceなどには、インテントを準備して、サービスにそれをなげる形をとっている。 startService - Context | Android Developers stopService - Context | Android Developers stopSelf - Service | Android Developers 加速度センサの情報を受ける 回転角の情報を受け取る センサーは加速度まではそのまま読み取れるが、回転角は加速度情報、地磁気情報から計算する必要がある。まず getRotationMatrix で回転行列を求め、getOrientation で回転行列を回転角に変換する(計算する) getRotationMatric - SensorManager | Android Developers getOrientation - SensorManager | Android Developers 引数に取った2つの配列には、傾斜行列、回転行列(の情報)が計算されて入ってくる。情報が不要ならnullでよい。 回転角の解釈 正位置として Zは天を指す Yは磁北を指す Xは Y,Z の外積を指す 画面の回転を抑制する AndroidManifest.xmlで抑制する 回転させないActivityに android screenOrientation="portrait" を追加すると、縦向き固定になる activity | Android Developers 動的に(プラグラム内で)で抑制する Activity内で、setRequestedOrientation を呼び出す setRequestedOrientation - Activity | Android Developers screenOrientation - ActivityInfo | Android Developers インテントにオブジェクトの情報を乗っける bundleで多くの情報をわたすような方法として、putParcelableArrayList くらいしか見当たらないので、これを使う。そのためには、Parcelable をimplements したようなクラスを作る必要がある。 Bundle | Android Developers parcelable をインプリメントしたクラスをつくる Parcelable実装にはParcelable.Createorというstatic fieldが必要。そのフィールドの初期化にて、Parcelに保存したデータを復元するためのコンストラクタを呼ぶ。 Parcelable | Android Developers Parcelable.Creater フィールドの実装 Parcelable.Creater | Android Developers createFromParcel(Parcel source)Parcelable.writeToParcel() で書き出されたParcelデータをインスタンス化する → コンストラクタを作っておく newArray(int size)ParcelableクラスのArrayを作る BundleやIntentに情報を乗せる IntentならputParcelableArrayListExtra、BundleならputParcelableArrayList で情報を登録 putParcelableArrayListExtra - Intent | Android Developers getParcelableArrayList - Bundle | Android Developers Activity側で受ける IntentならgetParcelableで受けられる。受けたときにすでにParcelableをimplementしたオブジェクトで受けられる。 getParcelableArrayListExtra - Intent | Android Developers getParcelableArrayList - Bundle | Android Developers 複数の情報をリストにして表示する [https //www54.atwiki.jp/api_programming/pages/202.html] バイブレーションを一定時間、作動させる Vibratorインスタンスからvibrate()を実行する。バイブレーションの実施にはAndroidManifest.xmlにパーミッションの追加が必要。 パーミッションの追加 マニフェストにパーミッションを追加する - パーミッションの宣言 | Android Developers Vibratorオブジェクトを生成する getSystemServiceでVibratorオブジェクトを生成する Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); getSystemService - Context | Android Developers Vibrator | Android Developers vibrateを実行する 幾つかパターンはあるが、かんたんなところで、これ。 vibrator.vibrate(500); vibrate - Vibrator | Android Developers 通知バーにバックグラウンド起動中の表示を出す 裏返したときの方向で、記録を分ける メニューのバーを設定する メニューリソースを準備し、表示させる。そのうえで、メニューのタップ動作に対する反応を記述する メニュー | Android Developers メニューリソースを準備する フォルダの作成 デフォルトではメニュー用のフォルダが無い(かもしれない)ので、res/menuを追加し、ここに入れておく。 resフォルダ右クリック [New]>[Android resource directory]を選択 ダイアログで、「Resource type 」から「menu」を選択し、OK リソースファイルの作成 menuフォルダを右クリック [New]>[Menu resource file] ファイル名を入力し、OK ファイル内に menu item / item / /menu を記述(実際はidやタイトルを設定する必要あり) Menu Resource | Android Developers 設定したメニューファイルを、Activityのメニューバーに評させる onCreateOptionMenuをオーバーライドして、この中でリソースの指定などを行う。XMLのメニューを実際?のメニューオブジェクトに変換するのに、inflatorを使用できる。 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); //(1) inflater.inflate(R.menu.menu_options_menu_list, menu); //(2) return super.onCreateOptionsMenu(menu); //(3) } onCreateOptionMenu - Activity | Android Developers メニューの選択を受け取る処理を作る オプションメニューを作っていれば、その受取はonOptionsItemSelectedをオーバーライドして処理できる。 @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } このとき、itemにクリックされた情報が入っているので、これを紐解いて、どのメニューがクリックされたか判断し、switchなどで処理する。 int itemId = item.getItemId(); Android 3.0(APIレベル11)以降では メニューリソースXMLのitemに、android onClick を記述しておくことで、動作を定義させることもできる。 チェックボックスを動作させる Android/入力コントロール(Controls) 設定画面を設定する/設定情報をローカルストレージに残す Android/設定 記録内容をGoogleスプレッドシートに記録する http //qiita.com/konnobu/items/8bec3d5a45235fc88a08 記録内容をGoogleカレンダーに記録する 多分、クライアント用のライブラリが作られていて、簡単に認証処理をしたり、データを取得したりできるようになっていると思われるが、別サイトでも転用が聞くように、地道な方法を取ってみる。というか、専用のライブラリの使い方をよくわかっていない。 流れは OAuth2.0で認証Google API にプロジェクトと登録(キーの発行) 認証コードを発行 受け取り コードを access token と交換 access token も使って、リクエスト送信 こまごまと引っかかった場所が多数。 AndroidManifest.xmlにパーミッションの設定が必要 ブラウザでURLを開く Android/インテントとインテントフィルタ ブラウザを開くURIとして、認証ページを指定する GoogleのOAuth2認証 OAuth2認証 | Android Developers Step 1 Send a request to Google's OAuth 2.0 server | Google Identify Platform リダイレクトを受け取る 大概の(google 以外でも)場合は、認証後に指定したリダイレクト先に飛ばしてくれる。そのスキーム名に応じて、Android側でどのアプリで開くのかを考えてくれる。Android に「このスキームがきたら、俺のアプリで開いて」と指示するためには、AndroidManifest.xml に記述する必要がある。 scheme // host port / path intent-filter内で、action, category, data を指定する。上記のリダイレクト先に対応する内容を書くのは data で、scheme は data android scheme="com.example.testproject" / のようになる。 Intent の 定数として ACTION_VIEW などが定義されているが、実体は文字列で、それが android.intent.action.VIEW などになる(ので、どれを設定するかはIntent を参照)。ブラウザでどんなスキームがきたらヨソになげるのか、どんな action として投げるのか、説明されている場所がわからないが、ひとまず action ACTION_VIEW category CATEGORY_BROWSABLR scheme ここは各自で で開けた。redirect_uri で scheme //~ が指定できない( /だけ)なので、hostは存在せず、pathだけ。 インテント解決 - インテントとインテント フィルタ | Android Developers Intent - Android Developers 受け取ったリダイレクトをデータに紐解く 一旦受け取れれば、中身は getIntent() を経由して、中身を見られる(Intent.getAction(), Intent.getCategories() など)。OAuth では、path のなかに code を入れて返してくるので、Dataのなかを探せばある Intent intent = getIntent(); String data = intent.getDataString(); とすると、googleの認証で指定した redirect_uri のあとに code がくっついて返ってきている。以下、サンプル com.example.####.#### /oauth2callback?code=4/8abcdefg# 上記の場合、oauth2callback を uri.getPath() で、4/8abcdefg# を getQueryParameter("code") で受け取れる。 getIntent - Activity | Android Developers getData - Intent | Android Developers getQueryParameter - Uri | Android Developers codeを送って、tokenを受け取る コードと必要情報を POST することで、access token との交換をする。この処理は、UIスレッドだとエラーになるので、AsyncTaskで実行する必要がある。 また、交換がうまく行かなかったときは、HttpURLConnection の getInputStream ではなく、 getErrorStream に情報が流れるため、プログラムの確認作業では注意。(この辺をよくわかっていなくて、エラー原因を探すのに苦労した。) redirect_uri はスキームもパスもコード発行依頼時と同じものを使う。 Android/プロセスとスレッド(processes and threads) Async Task | Android Developers tokenを保存する プレファレンスへの保存 終了時間と開始時間から、時間の計算をする リストビューで独自レイアウトを設定する https //www54.atwiki.jp/api_programming/editx/202.html USBデバッグ http //www.aiseesoft.jp/tutorials/android-debug-mode.html リリースビルド http //androidstudio.hatenablog.com/entry/2014/07/26/154043
https://w.atwiki.jp/aniwotawiki/pages/50308.html
登録日:2022/01/23 Sun 16 25 57 更新日:2023/11/14 Tue 21 46 48NEW! 所要時間:約 4 分で読めます ▽タグ一覧 Android Google Linux OS アニヲタIT教室 オペレーティングシステム オープンソース スマホ スマートフォン ドロイド君 Androidとは、スマートフォン等のモバイルデバイスに用いられるOS(オペレーティングシステム)の一種。 2023年時点の正式な最新バージョンは「14」。 【概要】 Apple社が送り出したiPhoneの対抗勢力として登場した、モバイル向けのOS。 当初はそのまんまAndroid社が開発していたが、2005年にご存知Google先生が子会社化。 今ではiOSと勢力を二分する程の代表的なプラットフォームとして海外ではiPhoneより普及しているとも言われ、 少なくとも日本ではiOS(iPhone/iPad)かこちらの二択になる程の普及率を誇る。 と言うかiPhone以外のスマートフォンはほぼAndroidしか選択肢が無い。 その開発の門戸も非常に広く、それゆえガラケー天下の日本でこれに乗り換えようとしたメーカーは大半が扱いきれずに消えていった。 もし興味があるなら、システムイメージやドライバ関係を公式配布しているGoogle純正のPixelシリーズで探すのが一番無難。 これらは過去のバージョンに戻すことも非常に簡単でアップデートの頻度も高く普段遣いでも優秀だ。新しいバージョンの度に実験台にされるので、ある意味では不安定とも言えるが。 【iOSとの比較】 iOSとの大きな違いといえばやはり開発者向けのポータルやマニュアルの豊富さと、カスタマイズ性の高さ。 ベースのLinuxだけではスマホの部品やアプリに対応しきれず、他のオープンソースのプログラムを色々追加したらしい(*1)ので、厳密にはUbuntuやMintなどの遠い親戚といったところだが、Linux同様中核部分もオープンソースとして広く開放されている。 iPhoneがあまり手を付けないエントリー仕様や電池持ち重視の低スペックから、メモリやCPU等ガン積みしたハイエンドスマホも可能で、やろうと思えばアプリは勿論、オリジナルのOSすら制作できる。一部のメーカーは実際に独自のAndroid系OSを開発して自社製スマホと共に命名していることも少なくない。 もっともPCや市販のデバイスで動くように最適化する必要があるので、動作が不安定にもなりやすい。 特にAndroid黎明期のガクガクした挙動を知る人なら、専用に作られているiPhoneのスムーズな動作が如何にありがたいかわかるであろう。 安物からハイエンドまでカバーできるのがAndroid、お高くはなるが相応の性能や品質を約束してくれるのがiPhoneといったところだろう。 【亜種】 Android TV 文字通り、AndroidをベースのOSとして作られたテレビ及びそのソフトウェアのこと。 テレビというよりもテレビサイズのタブレットにアンテナ差し込み口とフルセグが付いたものと言ったほうが近いかも。 Android GO マップと位置情報を利用したゲーム…ではなく、超低スペックなデバイスでも動かせるように開発された、軽量版のAndroid。 ストアにある「GO」と付いたアプリはこれ向けのもので、通常版よりも更にシンプルで軽いのが特徴。 【用語・小ネタ】 スマホやタブレットの基本的な使い方は各々で覚えて頂くとして、ここではAndroid独自の特徴やよく見る用語などを独断と偏見で紹介。 ・ランチャー 武器ではなく、ロックを解除してすぐに出てくる待ち受け画面のこと。PCで言うデスクトップ。 デフォルトのものが気に入らなければ、ストアから無料も含めて多数あるものをダウンロードして置き換えられる。 あのマイクロソフト製のもあるよ! ・GooglePlayストア Androidのアプリをダウンロードする為の公式ストア。 実はこれを使わずにネットに落ちているインストーラを使ってもアプリをインストールできる。 しかし開発のしやすさがそのままウイルス等にも繋がっているので、油断は禁物。 ・AOSP 「Android OpenSourse Project」の略。要するに変な改造がされていない純粋なAndroidを開発する公式ポータルのこと。ちなみにGoogleのプレイストアすらも入っていない。 ・開発者向けオプション 普通に使う分にはほぼ縁が無いであろう、専門的な設定を弄れる隠し項目。隠しコマンドとしてデバイス情報の「ビルド番号」を連打すると表示されるようになる。怖くなってもすぐオフに戻せるのでご安心を。 代表的な項目としては画面のアニメの速度を変えたり無効にできる「○○アニメスケール」。画面描画をソフトウェアでなくGPUに多く負担させることで処理が速くなる「GPUレンダリング」「HWオーバーレイを無効」が有名か。 重いスマホを復活させる手段としてよく挙がるが、大抵電池の減りも早くなるので一長一短だったりする。 ・fastboot 電源を入れようとしたら突然画面が出てきてビックリした人も多いかもしれない。 PCで言うところのBIOSメニューに該当する。機種によって変わるが一般的に呼び出し方は「電源ボタンと音量−を長押し」。 ただこの画面だけでは殆ど操作できないので、基本はPCとつないで操作する。 ・ADB PCからコマンドライン入力でデバイスを操作できるデバッグ用のツール。 導入するのはひと手間かかるが、コマンドプロンプト(もしくはPowerShell)を弄れる人ならここからアプリをインストールしたりリカバリーしたりアップデートしたりも可能。 ・root権限 権限が取得できると通常では使えない設定やアプリもできるようになる管理者権限のこと。OSがバグりかねないレベルの深い設定やアプリが使えないように大抵はロックされている。 調べると取得方法が出てくることがあるが、「脱獄」という俗称があるように、基本的に改造と同じ扱いとなるので自己責任。メーカーの修理なども受けられなくなる(改造行為を禁じているため)。 普通は弄れない一部の通知や特殊な項目も自在に操れるが下手に弄ると不具合が出たり最悪動作しなくなる(所謂文鎮化)ので、不便で仕方ないなどの理由がない限りは極力ロックしたまま使うことをオススメする。 以前発売されていた『Google Nexus』シリーズは最初からその手の人が買うことが前提で、ブートローダーがフリーになっていた。 後継機種であり、ピュアアンドロイドを標榜する『Google Pixel』シリーズも、割と簡単にブートローダーのアンロックを解除可能になっている。 ・イースターエッグ これも隠し小ネタの一つ。 端末情報のAndroidバージョンの項目を数回タップすると隠し画像を見たりミニゲームをプレイすることができる。 ・恐竜ゲーム Androidの標準ブラウザは「Google Chrome」であるが、Chromeにもイースターエッグがある。 ネットワークに繋がず立ち上げるか、chrome //dinoをアドレスバーに入力すると、ドットの恐竜が表示されるが、実は彼をタッチするとちょっとしたミニゲームができる。 走る彼をジャンプさせて鳥やサボテンといった障害物を避け、どこまで走れるかチャレンジするというもの。 もちろんAndroid版Chromeにもしっかり存在する。 ・AmazonのFireタブレット 標準だと「Amazon アプリストア」しか使えないが、 OS自体はAndroidなので追加でPlayストアを入れることが可能(あくまで非公式な手法なので自己責任でお願いします)。 ・カスタムROM 上で書いた通りAndroidはオープンソースなので、AOSP製のソースコードを基にしたサードパーティ製のOSも基本的に無償で入手することができる。 脱獄する以上に上級者向け…というか文鎮化すると困るようなメインのスマホなんかで試すのはまず論外として、古いバージョンのままアップデートが止まってしまったタブレットや引退したスマホを復活させる手段には一応使える。 「XDAフォーラム」といった有志のポータルがボランティアで開発している場合がほとんどだが、そのメンバー個人でリリースしたバージョンも多数出回っている。 古い機種を復活させる点に特化したり、PixelシリーズのUIを再現してみたり(というかAOSPの時点でほぼそのまんま)といった面白い特徴のOSもあったりするので興味があれば調べてみるのも面白い。 追記・修正はAndroidのGoogleChromeからお願いします。 ※以下、本wikiにおける注意点 「ふうふう、追記・修正ひと段落。……ひっ!ご、主人様!それは所要時間30分超の項目!」 「いや、え、えっとその…私めはエントリーモデルですのでつまり、そのー…お、重すぎてクラッシュの原因にもなりますので編集はご自重いただけると…」 「えっ、た、確かに一応私、メインメモリバッチリ6GB積んだミドルスペックですけど…あっ!またプチフリが…」 「うう…こればかりはどうしてかは私めもわかりかねます。で、ですからパソコンをお使いになられるかせめてゆっくりと…ひぐっ、ぜんぜん聞いてくれない…」 「ら、らめ、れ…す…ごしゅじん、さ、ま…変換とバックスペースをそんなにた、叩かれるとわくたしも、もうだめえぇぇぇ……ガクッガクッ」 「Chrome」は応答していません。 アプリを終了する 待機 フィードバックを送信 △メニュー 項目変更 この項目が面白かったなら……\ポチッと/ -アニヲタWiki- ▷ コメント欄 [部分編集] Linuxの系譜とは言いつつもディストリビューションではない あとCyanogenModとかFire OSとかは記述したほうがいいのかな? -- 名無しさん (2022-01-23 21 11 04) 最初期は確かデジカメ用のOSとして開発されてたんだっけ。昔Android搭載デジカメとかあったけどある意味先祖返りだったのかな… -- 名無しさん (2022-01-24 07 05 36) このOSのスマホとPC繋げてチビチビデータ移動するのが癒しの時間 -- 名無しさん (2022-01-24 21 55 53) ↑ わかる -- 名無しさん (2022-01-24 22 39 41) イースターエッグ見てマジで!?って思って実際やってみたら、マジで別画面になった。ミニゲームって程の物じゃなかったが文字が動かせた。 -- 名無しさん (2022-06-17 15 38 15) イースターエッグを知らずに起動させた事が1回だけあってウチのスマホ壊れたんかなと勘違いしたことがあった。その時のイースターエッグの内容がZonbie Artだったから尚更怖かった -- 名無しさん (2022-08-26 11 36 03) Androidって元ネタ男なのか、じゃあ女体化は事実上性転換だな -- 名無しさん (2022-08-27 09 37 11) GoogleNowランチャー(Google純正品)が無くなった今では、意外かもしれないけど記事で挙げられているMS製ランチャーが操作感がGoogleNowランチャーに近くて気に入っている -- 名無しさん (2023-11-05 22 09 52) 名前 コメント
https://w.atwiki.jp/banrui/pages/24.html
開発環境設定 1.Android SDKをインストール 2.環境変数の設定 .bash_profileを書き換える export PATH=$PATH Developer/android-sdk-mac_x86/tools /Developer/android-sdk-mac_x86/platform-tools 3.Android SDKにADTプラグインをインストール Eclipse 「ヘルプ」→メニュー「新規ソフトウェアのインストール」→追加 名前:AndroidPlugin ロケーション:https//dl-ssl.google.com/android/eclipse/ チェックボックにチェック→完了→再起動 4.環境設定→「Android」を選択し、SDKロケーションにはAndroid SDK を配置した場所を指定し「OK」 5.platformsディレクトリは、空の状態なので設定 6.androidでターミナルでAndroid SDK and AVD Manage起動 7.Available packageを選択すると、右側にインストールできるパッケージが表示されるので全部選択→インストール 参考サイト MacでAndroid開発環境構築 Macに「eclipse」、「Android SDK」をインストールしてAndroid開発環境を整える。 プログラミング XML テキストサイズ android textSize パスワード android inputType="textPassword" ■LayoutInflater 参考 実装 TextViewに数値を渡す時は TextView.setText(String.valueOf(int)) を使う 日時の取得 java.util.CalendarクラスなどでOK 参考 Edittext カーソル位置を左上からにするのは、android gravity="top|left"を利用 参考 評価については、RatingBarを利用 サイズの変更と星の手動で動くようにする RatingBar参考 RatingBar生成 SQLite 標準操作マニュアル 参考 Android SQLiteデータベースを作成する(SQL文をリソースファイルに定義する) 参考ページ
https://w.atwiki.jp/fujiyan/pages/38.html
(作成中) WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 参考サイト 公式サイト Androidで動く携帯Javaアプリ作成入門 Tech Booster 逆引きAndroid入門 ActivityとView 参考 Android Developers 世界を目指せ!Androidアプリ開発入門 Activityは、画面を表す。 ViewはUIを構成する部品。ActivityにViewを設定することで、画面を構築する。 Viewの構成方法は2つ(静的)レイアウトXMLを記述してコンパイルしたものを設定。お手軽。通常はこっち (動的)Viewオブジェクトを適宜生成して設定。前もって作成するViewが決まらない場合はこっち。 XMLでViewを定義 res/layout以下に.xmlファイルを作成 作成すると、R.layout.[ファイル名]という定数名で、作成したViewを表すIDが定義される(ファイル名がmain_layout.xmlなら、R.layout.main_layoutという定数が定義される)。 定義されたIDをActivity#setContentView()に渡す。 複数のView定義が必要な場合は、その分だけxmlファイルを作れば良い。 画面切り替え 参考 アンドロドロ バックボタンで前画面に戻したい場合はActivity切り替えで実装。バックボタンを押すと、アクティブなActivityに対してfinish()が呼び出され、直前のActivityがアクティブになる。ブラウザの「戻る」感覚だろうから、こっちが通常なんでしょう。 グローバルリソース(カメラ等)の取得/解放は、よほどの事情が無い限り、onResume()/onPause()で行うこと。でも、カメラでよくやるような、SurfaceHolderのsurfaceCreated()/surfaceDestroyed()は、Activity切り替え時のタイミングで呼ばれるっぽいので、ここでカメラの取得/解放を行っても大丈夫っぽい(あやふや)。 Activityを2つ用意するのか、1つのActivity内でViewFlipperを使うかは悩み中。多分、メモリ管理を細かく制御して、OSに負担を掛けないようにするのはActivity2つなんでしょう。次画面のActivity起動時に次画面用のリソースを取得、前画面のリソースを解放とか、onStop()/onRestart()でリソースの一時解放/再取得とか。 ViewFlipperの場合は、全ての画面のリソースをまとめてメモリにロードするんじゃないかと。 アプリケーションの終了 単一Activityの場合はfinish()で良い。 複数Activityの場合は、最後に開始したActivityから順次finish()していき、最後にroot Activityをfinish()させるのが良いと思う。これは、Activityはスタックに詰まれていくことに由来。LIFOでfinish()していく。 多分、ActivityからTaskを終了させる方法は無い。何故なら、Activityは、さまざまなTaskから呼ばれることを想定しているため、自分を呼んだTaskを勝手に終了させるわけにはいけないから、かと。 moveTaskToBack()でTaskをバックグラウンドに追いやって、そのうちOSに掃除してもらう、という方法もある。こっちがAndroidの標準だ、という話もあるけど、何となく、うーん。だって、この方法だと、再起動したときに、前の状態から開始されてしまうし…。 moveTaskToBack()はあくまで「中断」であり、「終了」はやっぱり地道にfinish()していくべきだと思うの 一般的な実装としては、startActivityForResult()でchild Activityを開始し、child Activityの終了後に呼ばれるonActivityResult()で、自身もfinish()する System.exit(0)で終わらせてはゼッタイダメ。 カメラ(Android 2.1 API Level 7) AndroidManifest.xmlの記述 参考 プログラマのネタ帳 uses-permission android name="android.permission.CAMERA" / uses-feature android name="android.hardware.camera" / uses-feature android name="android.hardware.camera.autofocus" / uses-feature android name="android.hardware.camera.flash" / uses-permissionで、カメラ利用の許可が必要であることを宣言し、残りの3つでカメラ、オートフォーカス、フラッシュの機能を使用することを宣言します。 また、Activityの属性に下記を追加。 android screenOrientation="landscape" android theme="@android style/Theme.NoTitleBar.Fullscreen" screenOrientationの設定は、なんか、カメラは水平でしか使えないらしいため…。 themeの設定は、アプリをフルスクリーン表示にするため。カメラアプリは基本的にフルスクリーン。 MediaStore.Images.Media.insertImage()で保存すると画質が落ちる 参考 日本Androidの会 画像を加工しない場合は、生成されたjpegデータをそのまま保存する。 // Camera#takePicture()の第3引数に渡す、コールバックオブジェクト private Camera.PictureCallback pictureListener = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { try { insertImageToMediaStore(data); } catch (IOException e) { throw new RuntimeException(e); } //後処理を記述 } }; // dataに格納されたjpegデータを保存 private void insertImageToMediaStore(byte[] data) throws IOException { ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); ByteArrayInputStream in = new ByteArrayInputStream(data); try { int size; final int BUFFER_SIZE = 8192; byte[] buffer = new byte[BUFFER_SIZE]; BufferedOutputStream out = new BufferedOutputStream(resolver.openOutputStream(uri)); try { while ((size = in.read(buffer, 0, buffer.length)) 0) { out.write(buffer, 0, size); } out.flush(); } finally { out.close(); } } finally { in.close(); } } 画像を加工して保存 参考 Androidのあ~ん rTAKI0329's android ブログ グロブ(OutOfMemoryで落ちる件) なんか、下の方法みたいに、カメラの撮影サイズでBitmapの別インスタンスを生成すると、メモリ不足で落ちるっぽいぞ…。エミュレーション環境では普通に動くけど、実機でカメラ撮影後に突然落ちるような場合は原因の一つとして疑ってみてもいいかも コールバックメソッドに渡されるjpegデータをBitmapに変換して、Canvasで描画をする。その後、Bitmapをjpegで保存する。 jpeg→ビットマップ→jpegの変換を行うので、画質が落ちたり、ファイルサイズが増えたり…。 BitmapFactory.decodeByteArray()で作るBitmapがimmutableなため、copy()でmutableなBitmapを再作成する。API Level 11なら、decodeByteArray()のオプションでmutableなBitmapを直接作れるかも? // Camera#takePicture()の第3引数に渡す、コールバックオブジェクト private Camera.PictureCallback pictureListener = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { Bitmap orgBmp = BitmapFactory.decodeByteArray(data, 0, data.length); Bitmap bmp = orgBmp.copy(Bitmap.Config.ARGB_8888, true); Canvas canvas = new Canvas(bmp); // canvasで描画 try { insertImageToMediaStore(bmp); } catch (IOException e) { throw new RuntimeException(e); } camera.startPreview(); } }; // Bitmapをjpegで保存 private void insertImageToMediaStore(Bitmap bmp) throws IOException { ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); BufferedOutputStream out = new BufferedOutputStream(resolver.openOutputStream(uri)); try { bmp.compress(Bitmap.CompressFormat.JPEG, 100, out); out.flush(); } finally { out.close(); } } GPSとジオコーディング(Android 2.1 API Level 7) LocationManagerを取得する。 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); onLocationChanged()が呼ばれなくなる 参考 A Day In The Life LocationManager#removeUpdates()を呼ばずにActivityを終了させると、次回起動時にonLocationChanged()が呼ばれなくなるらしいです。必ず呼びましょう。 配布と署名 アプリケーションはapkファイルにパッケージングして配布する。 署名付きapkファイルじゃないと、端末にインストールされません。 署名のためのkeytool使用法 参考 Android Developers keyalgで指定するアルゴリズムはDSAとRSAがサポートされているらしい。通常はRSAにしておきましょう。 keysizeについては2048以上を推奨とされています。 validityで指定する有効期限については、10000日以上を推奨されています。 ということで、推奨されるkeytoolのオプションは keytool -genkey -v -keystore [keystoreファイル名] -alias [エイリアス] -keyalg RSA -keysize 2048 -validity 10000 1つのkeystoreに対して、複数の鍵を生成できる。keystoreの中で、鍵を識別するためにエイリアスを用いる。 なので例えば、keystoreファイル名はワークスペース名、エイリアスはプロジェクト名(=アプリケーション名)、みたいな感じにすると良い(あくまで例)。 keytool -genkey -v -keystore workspace.keystore -alias app1 -keyalg RSA -keysize 2048 -validity 10000 keytool -genkey -v -keystore workspace.keystore -alias app2 -keyalg RSA -keysize 2048 -validity 10000 keystoreファイルやパスワードは失くしたり忘れたりしないようにね あれ、keytoolいらなくね?(ADT Plugin for Eclipseがあれば) apkを作成したいアプリのプロジェクトのルートのコンテキストメニューから、[Export...]→[Android]-[Export Android Application]を選択する。 [Project Checks]で、何もエラーが無いことを確認して[Next ] [Keystore selection]では、最初にkeystoreファイルを作る場合は[Create new keystore]を選択[Location]には、keystoreファイルのフルパスを入力失くさないように、ワークスペース内に、keystoreファイル格納用のプロジェクトを作成し、そこに作成すると良いかも。 [Password]と[Confirm]には、keystoreファイルにアクセスするためのパスワードを入力する。 [Key Creation]では、下記を入力[Alias]には鍵のエイリアスを入力。まぁ普通はアプリケーション名 [Password]と[Confirm]には、鍵にアクセスするためのパスワードを入力する。 [Validity]には年を入力するので注意。推奨は25年以上です。 [First and Last Name]から[Country Code (XX)]については、どれか1つにでも入力すればOK。 [Destination and key/certificate checks]では、下記を入力[Destination APK file]に、出力するapkファイルをフルパスで入力。 あらまぁ簡単